import puppeteer from "puppeteer";

export async function generatePDF(url, outputPath = "report.pdf") {
  const browser = await puppeteer.launch({
    // executablePath: 'C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe',
    headless: true,
    args: ["--no-sandbox", "--disable-setuid-sandbox"],
    executablePath: '/app/puppeteer/chrome/linux-131.0.6778.204/chrome-linux64/chrome'  //linux docker镜像中使用
  });
  //A4:  595px × 842px
  const page = await browser.newPage();
  await page.setViewport({
    width: 1190,   // 扩宽纸张代替 scale
    height: 1684,
  });
  // await page.setViewport({
  //   width: 2536,    // A4 宽度（像素）
  //   height: 703,   // A4 高度（像素）
  //   deviceScaleFactor: 1,
  // });
  // await page.emulateMediaType('screen'); //强制使用屏幕媒体样式
  try {
    await page.goto(url, { waitUntil: "networkidle0", timeout: 3000 });
  } catch (error) {
    console.error("导航到页面失败", error);
    throw new Error("导航到页面失败");
  }

  // 等待页面上任意 canvas 元素出现且可见
  // try {
  //   await page.waitForSelector('canvas', {
  //     visible: true,  // 确保 canvas 元素可见（已渲染到页面）
  //     timeout: 5000  // 超时时间 10 秒
  //   });
  // } catch (error) {
  //   console.error('查找canvas元素超时')
  // }


  // await new Promise(resolve => setTimeout(resolve, 3000)); // 等待 3 秒
  // 等待 1 秒内无 DOM 变化（判断页面渲染稳定）
  // await page.waitForFunction(() => {
  //   const lastChange = window.lastDomChange || Date.now();
  //   window.lastDomChange = Date.now();
  //   return Date.now() - lastChange > 1000; // 1秒内无变化
  // }, { timeout: 30000 });

  // await page.addStyleTag({
  //   content: `
  //   @media print {
  //     html, body {
  //       padding-top: 100px !important;  /* 与 margin.top 对齐 */
  //       padding-bottom: 70px !important; /* 与 margin.bottom 对齐 */
  //       box-sizing: border-box !important;
  //     }
  //     thead { display: table-header-group; }
  //     tr, td, th { page-break-inside: avoid; }
  //   }
  // `,
  // });
  // 注入 CSS：将整个页面缩放 80%
  // await page.addStyleTag({
  //   content: `
  //     body {
  //       transform: scale(0.8);  /* 缩放比例 80% */
  //       transform-origin: top left;  /* 从左上角开始缩放 */
  //       width: 125%;  /* 配合缩放，避免内容被截断（1/0.8 = 1.25） */
  //     }
  //   `
  // });

  // await page.evaluate(() => window.dispatchEvent(new Event('resize')));

  // 等待自定义条件满足（例如：数据加载状态为"complete"）
  try {
    await page.waitForFunction(() => {
    // 这里是在浏览器环境中执行的代码
    return window.pdfReady === true; // 假设页面定义了全局变量标记状态
  }, { timeout: 5000 });
  } catch (error) {
    console.error("pdfReady标志获取失败", error);
  }

  await page.pdf({
    path: outputPath,
    // format: "A4",
    // scale: 0.8,
    width: 1190,   // 扩宽纸张代替 scale
    height: 1684,
    printBackground: true,
    displayHeaderFooter: true,
    // headerTemplate: `
    //   <div style="width:100%; font-size:10px; text-align:center; padding:5px; border-bottom:1px solid #ccc;">
    //     这是页眉 - 2025
    //   </div>`,
    // footerTemplate: `
    //   <div style="width:100%; font-size:10px; text-align:center; padding:5px; border-top:1px solid #ccc;">
    //     第 <span class="pageNumber"></span> / <span class="totalPages"></span> 页
    //   </div>`,
    margin: {
      // top: '12mm',
      // bottom: '12mm',
      top: '0mm',
      bottom: '0mm',
      left: '0mm',
      right: '0mm',
    },
  });

  await browser.close();
  console.log("✅ PDF 已生成：" + outputPath);
}
